Error correction is the process of detecting bit errors in memory and correcting them. Known error correction techniques can resolve both single-bit and multi-bit errors. In computer systems, information is represented in binary format (1s and 0s). When binary information is passed from one point to another, a mistake can be made in that a binary 1 can interpreted as a binary 0, or a binary 0 can be interpreted as a binary 1. An error of this sort can be caused by media defects, electronic noise, component failures, poor connections, deterioration due to age, and other factors. When a bit is mistakenly interpreted, a bit error has occurred. Memory error correction methods often involve the addition of extra bits or letters to binary words. The extra letters (bits) add an additional data structure to each word. If the content of the data binary word is altered, the content of the binary word will no longer correspond or map to the data of the appended data structure, and the memory error can be detected and corrected.
Error correction is necessary to insure the accuracy and integrity of data and, in some cases, to assist in the operation of fault tolerant computer systems. It is expected that virtually every digital data transmission or storage system makes errors at a certain rate. As data transfer rates and storage densities increase, the error rate also increases. Some digital systems experience more errors than others. For instance, an optical disk has a higher error rate than a magnetic disk. A magnetic tape has a higher error rate than a magnetic disk. Without some form of error detection and correction, most storage devices would be too unreliable to be useful. In virtually all digital systems, as transfer rates increase and designers squeeze more bits into smaller spaces, errors occur more frequently. In sum, as speed and density increase, error correction becomes a necessity.
A common solution for error correction in the memory of a computer system is ECC (error correction code) checking. ECC checking involves a comparison of the data value of the data address and an additional data structure that is appended to or associated with each data value. ECC checking allows the detection of both single-bit and multi-bit memory errors and the transparent correction of single-bit errors. ECC checking involves the creation of data structure that is appended to or associated with the data content of the memory address. The ECC data structure contains sufficient detail to permit the recovery of a single-bit error in the protected data content. ECC checking typically uses a data structure of 7 bits to perform error checking and single-bit correction on a data string of 32 bits, or a data structure of 8 bits to perform error checking and single-bit correction on a data string of 64 bits.
In some ECC checking schemes, multi-bit errors can be both identified and corrected. In many instances, however, multi-bit errors cannot be corrected and the computer system must halt. When a multi-bit error occurs, a non-maskable interrupt (NMI) is often issued that instructs the system to shut down to avoid data corruption. Although occurring less frequently than single-bit errors, multi-bit errors cause more severe problems because they often result in the computer system being halted. In comparison, a single-bit error will not cause the computer system to halt, and ECC checking may transparently correct the error.
Although ECC checking involves the transparent correction of memory errors in the computer system, system administrators and computer users often find it useful to know that an error has occurred, the time that the error occurred, the frequency of the occurrence of the error, and if the error has been corrected. A pattern of errors, for example, can indicate a hardware problem that needs to be addressed or that a piece of hardware, such as a memory module, needs to be replaced. The logging of errors that have been identified and corrected by an ECC checking routine is often inadequate. In many systems, the size of the log is limited so that only a limited number of errors, perhaps only a single error, can be logged, and with each successive error writing over the logged information for the previous error. In addition, because ECC checking runs continuously and corrects errors transparently, error identification and checking often occurs without any involvement on the part of the user, limiting the ability of a system administrator to know about and perform a standalone analysis of a single failing memory address. In sum, although a number of memory errors may be identified and corrected through ECC checking, only a small subset of those errors are logged for later analysis. Many errors occur and are corrected without any record of the presence or correction. As such, these errors, for which there is no record of their presence or correction, are corrected without any record of their correction being available to the administrator or user of the computer system.
Because the error logging of ECC checking is generally inadequate and because error correction for single bit errors occurs automatically and transparently, a system administrator may not appreciate the frequency and severity of memory errors in the computer system. In addition, because only a small subset of the defective memory addresses are logged by the ECC checking routine, the administrator is not aware of the physical memory modules that include the defective or failing memory addresses. When ECC checking is enabled, a recurring single-bit error requires that repetitive corrective steps be executed to correct the error. While it is possible that a computer system with a failing memory module can continue to operate despite the repeated error in the memory module, the computer system will function at a level that is below its normal capacity for handling memory accesses, as the single-bit error that is caused by a failing memory module may have to be repaired each time the system reads from the address of the damaged memory module. The sum of these repetitive steps to correct recurring errors caused by a defective memory module unnecessarily burdens the system memory and degrades system performance. In addition to the performance concerns caused by the automatic correction of single-bit errors, the detection of any multi-bit error during ECC checking will typically cause the computer system to halt. Thus, although ECC checking provides for the automated and often transparent correction of memory errors, the process of correcting those errors may actually hinder the performance of the computer system in that the administrator or use of the computer system will not recognize constraints on the computer system caused by the repeated failure of physical memory modules.